#ifndef _NETWORK_PROCESS_DEFINE_H_
#define _NETWORK_PROCESS_DEFINE_H_

#include "ErrMsgPro.h"

#include <stdio.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/time.h>
#include <sys/select.h>
#include <signal.h>
#include <netdb.h>
#include <sys/resource.h>
#include <netinet/in.h>

#define     SA          struct sockaddr
#define     MAXLEN      512
#define     SERV_PORT           9877
#define     LISTENENQ           1000

typedef     void(* SIG_HANDLER)(int);


char const* getfamilystr(short type);      //返回结果指向静态变量，故不能对返回结果内容直接修改
void display_sockaddrin(struct sockaddr_in* saddrin);
void display_sockaddr(struct sockaddr* saddr);
int udp_client(const char *host, const char *serv, void **saptr, socklen_t *lenp);
void pr_cpu_time(void);
int tcp_listen(char* ip, char* port, socklen_t* addrlen);
void gethostbyaddrs(int argc, char** argv);
void gethostbynames(int argc, char** argv);
struct addrinfo* host_serv(const char *hostname, const char *service, int family, int socktype);
char const* sock_ntop(const struct sockaddr *sa, socklen_t salen);
int createudpsocket(int* sockfd, SA* addr, socklen_t addrlen);

int setnblock(int fd);

/**
 * @brief 获取本地系统的字节排列方式，即小端还是大端
 * @note 
 * 小端模式：数据的高字节保存在内存的高地址中，类似升序排序
 * 大端模式：跟小端模式相反，类似降序
 * 网络字节序：跟大端模式一样，为统一不同大小端之间通信的规范，发送端总是以网络字节序来发送数据
 * 主机字节序：跟小端模式一样
 */
void byteorder();

int get_local_ip(const char* ifname);
#endif //_NETWORK_PROCESS_DEFINE_H_